/*
 * UMediaPacketQueue.h
 *
 *  Created on: 2020年4月25日
 *      Author: chuanjiang.zh
 */

#ifndef UMEDIAPACKETQUEUE_H_
#define UMEDIAPACKETQUEUE_H_

#include "UMediaPacket.h"

class UMediaPacketQueuePrivate;


class DLLEXPORT UMediaPacketQueue
{
public:
	UMediaPacketQueue();
	virtual ~UMediaPacketQueue();

	size_t size();

	bool empty();

	size_t push(UMediaPacket& packet);

	UMediaPacket pop();

	bool pop(UMediaPacket& packet);

	void clear();

	/**
	 * 在指定时间内等待媒体包
	 * 如果队列不空,立即返回true
	 * @param ms	毫秒
	 * @return true 表示队列有元素了
	 */
	bool timedwait(int ms);

	/**
	 * 如果队列为空, 等待, 并弹出头部元素
	 * @param packet
	 * @param ms
	 * @return
	 */
	bool pop(UMediaPacket& packet, int ms);

	/// 取消等待
	void cancelWait();

	/**
	 * 获取媒体时长, 单位为微妙
	 * @return
	 */
	int64_t getDuration();

	/**
	 * 删除队列前面的包, 直到视频关键帧
	 * 如果队列中没有视频关键帧, 不做任何操作
	 * @return 删除的包数量
	 */
	size_t dropUntilKeyFrame();

	/**
	 * 启用事件通知
	 * @param enabled
	 */
	void enableEvent(bool enabled);

	void unget(UMediaPacket& packet);

private:
	UMediaPacketQueuePrivate*	m_pimp;

};

#endif /* UMEDIAPACKETQUEUE_H_ */
